/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package analiseSintatica;

import AnaliseLexicaFinal.EstruturaDeDados.ErroLexico;
import AnaliseLexicaFinal.EstruturaDeDados.LinkToken;
import analiseSintatica.Regras.Blocos.RegraPrograma;
import analiseSintatica.Regras.Expressoes.RegraOpIncremento;
import analiseSintatica.estruturadados.Arvore;
import analiseSintatica.estruturadados.ErroSintatico;
import analiseSintatica.estruturadados.NoArvore;

import java.util.LinkedList;

/**
 *
 * @author amferraz
 */
public class AnalisadorSintatico {

    private LinkedList<LinkToken> tokens = new LinkedList<LinkToken>();
    public LinkedList<ErroSintatico> erros;
    public Arvore arvore;
    
    public void realizarAnaliseSintatica() {
    }

    public AnalisadorSintatico(LinkedList<LinkToken> tokens) {
        this.tokens = tokens;
    }

    public void analisar(){
    	erros = new LinkedList<ErroSintatico>();
    	try {
			arvore = new Arvore(RegraPrograma.getInstance().analisar(tokens));
		} catch (ErroSintaticoException e) {
			while (e.size() != 0){
				erros.add(e.getErros());
			}
		}
    }
    
    /**
     * @return the listaTokens
     */
    public LinkedList<LinkToken> getListaTokens() {
        return this.tokens;
    }

    /**
     * @return the arvoreDerivacao
     */
    public Arvore getArvore() {
        return this.arvore;
    }
}
